/*
 * Copyright 2019 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkSGTransformPriv_DEFINED
#define SkSGTransformPriv_DEFINED

#include "include/core/SkM44.h"
#include "include/core/SkMatrix.h"
#include "modules/sksg/include/SkSGTransform.h"

namespace sksg {
// Helper for accessing implementation-private Transform methods.
class TransformPriv final {
public:
    static bool Is44(const sk_sp<Transform> &t)
    {
        return t->is44();
    }

    template <typename T, typename = std::enable_if<std::is_same<T, SkMatrix>::value || std::is_same<T, SkM44>::value>>
    static T As(const sk_sp<Transform> &);

private:
    TransformPriv() = delete;
};

template <> inline SkMatrix TransformPriv::As<SkMatrix>(const sk_sp<Transform> &t)
{
    return t->asMatrix();
}

template <> inline SkM44 TransformPriv::As<SkM44>(const sk_sp<Transform> &t)
{
    return t->asM44();
}
} // namespace sksg

#endif // SkSGTransformPriv_DEFINED
